PS:由于调库太多,有时会忘记底层的算法如何实现,即使看paper知道算法是如何运算,也无法熟练的代码落地,所以,温习一下一些机器学习的基本名词解释和具体优化算法。
牛顿法和拟牛顿法也是求解无约束最优化问题的常用方法,有着迭代速度快的优点,由于每一步都要求解目标函数的海赛矩阵的逆矩阵,计算较为复杂,拟牛顿法通过近似的正定矩阵去代替计算较为复杂的海赛矩阵的逆矩阵,简化了计算复杂度
牛顿法
无约束最优化问题:
minx∈Rnf(x)
其中x∗为目标函数的极小点。
假设条件f(x)为具有二阶连续偏导,第k次迭代值为x(k),则可将f(x)在 x(k)附近进行二阶泰勒展开:
f(x)=f(x(k))+gkT(x−x(k))+21(x−x(k))TH(x(k))(x−x(x))
其中,gk=g(x(k))=∇f(x(k))是f(x)的梯度向量在点x(k)的值,H(x(k))是f(x)的海赛矩阵
H(x)=[∂xi∂xj∂2f]n×n
在点x(k)的值。
函数f(x)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0。特别的当H(x(k))是正定矩阵时,函数f(x)的极值为极小值。(相当于 标量函数的二阶导数大于0)
假设x(k+1)满足
∇f(x(k+1))=0
根据二阶泰勒展开,得
∇f(x)=gk+Hk(x−x(x))
其中,Hk=H(x(k)),则
gk+Hk(x(k+1)−x(x))=0
x(k+1)=x(k)−Hk−1gk
令
Hkpk=−gk
则
x(k+1)=x(k)+pk
算法计算过程如下
牛顿法:
输入:目标函数f(x),梯度g(x)=∇f(x),海赛矩阵H(x),精度要求ε
输出:f(x)的极小点x∗
- 取初始点x(0),置k=0
- 计算gk=g(x(k))
- 若∥gk∥<ε则停止计算,得近似解x∗=x(k)
- 计算Hk=H(x(k)),并求pk
Hkpk=−gk
- 置x(k+1)=x(k)+pk
- 置k=k+1,转2.
拟牛顿法
思路 考虑用一个n阶矩阵Gk来代替海赛矩阵的逆矩阵Hk−1
取x=x(k+1),由
∇f(x)=gk+Hk(x−x(x))
得
gk+1−gk=Hk(x(k+1)−x(x))
记yk=gk+1−gk,δk=x(k+1)−x(k),则
yk=Hkδk
Hk−1yk=δk称为拟牛顿条件。
如果Hk是正定矩阵(Hk−1也是正定),则可以保证牛顿法搜索方向是下降方向,存在搜索方向pk=−λgk
由
x(k+1)=x(k)−Hk−1gk
有
x=x(k)−λHk−1gk=x(k)+λpk
则f(x)在x(k)的泰勒展开可近似为
f(x)=f(x(k))−λgkTHk−1gk
由于Hk−1正定,故gkTHk−1gk>0。当λ为一个充分小的正数时,有f(x)<f(x(x)),即搜索方向pk是下降方向。
拟牛顿法将Gk视作Hk−1的近似,满足正定条件后,还要满足上述拟牛顿条件,按照拟牛顿条件,每次更新迭代时可以选择更新矩阵Gk+1:
Gk+1=Gk+∇Gk,具体有以下几种实现方法:
DFP算法
DFP算法中选择Gk作为Hk−1的近似,假设每一步迭代中矩阵Gk+1是由Gk加上两个附加项构成,即Gk+1=Gk+Pk+Qk
其中,Pk与Qk是待定矩阵。则Gk+1yk=Gkyk+Pkyk+Qkyk
为使Gk+1满足拟牛顿条件,可使Pk与Qk满足
Pkyk=δk
Qkyk=−Gkyk
可取
Pk=δkTykδkδkT
Qk=−ykTGkykGkykykTGk
可得矩阵Gk+1的迭代公式
Gk+1=Gk+δkTykδkδkT−ykTGkykGkykykTGk
可以证明,如果初始矩阵G0是正定的,则迭代过程中的每个矩阵Gk都是正定的。
算法运算过程:
输入:目标函数f(x),梯度g(x)=∇f(x),精度要求ε
输出:f(x)的极小点x∗
- 取初始点x(0),取G0为正定矩阵,置k=0
- 计算gk=g(x(k))若∥gk∥<ε则停止计算,得近似解x∗=x(k);否则,转3.
- 置pk=−Gkgk
- 一维搜索,求λk使
f(x(k)+λkpk)=minλ≥0f(x(k)+λpk)
- 置x(k+1)=x(k)+λpk
- 计算gk+1=g(x(k+1)),若∥gk+1∥<ε,则停止计算,的近似解x∗=x(k+1);否则,计算
Gk+1=Gk+δkTykδkδkT−ykTGkykGkykykTGk
- 置k=k+1,转3.
BFGS算法
BFGS算法中选择Bk逼近海赛矩阵Hk,相应的拟牛顿条件
Bk+1δk=yk
假设每一步迭代中矩阵Bk+1是由Bk加上两个附加项构成,即
Bk+1=Bk+Pk+Qk
其中,Pk与Qk是待定矩阵。则
Bk+1yk=Bkyk+Pkyk+Qkyk
为使Bk+1满足拟牛顿条件,可使Pk与Qk满足
Pkδk=yk
Qkδk=−Bkykδk
可取
Pk=ykTδkykykT
Qk=−δkTBkδkBkδkδkTBk
可得矩阵Bk+1的迭代公式
Bk+1=Bk+ykTδkykykT−δkTBkδkBkδkδkTBk
可以证明,如果初始矩阵B0是正定的,则迭代过程中的每个矩阵Bk都是正定的。
算法运算过程:
输入:目标函数f(x),梯度g(x)=∇f(x),精度要求ε
输出:f(x)的极小点x∗
- 取初始点x(0),取B0为正定矩阵,置k=0
- 计算gk=g(x(k))若∥gk∥<ε则停止计算,得近似解x∗=x(k);否则,转3.
- 由Bkpk=−gk求出pk
- 一维搜索,求λk使
f(x(k)+λkpk)=minλ≥0f(x(k)+λpk)
- 置x(k+1)=x(k)+λpk
- 计算gk+1=g(x(k+1)),若∥gk+1∥<ε,则停止计算,的近似解x∗=x(k+1);否则,计算
Bk+1=Bk+ykTδkykykT−δkTBkδkBkδkδkTBk
- 置k=k+1,转3.
Broyden算法
对BFGS算法迭代公式,若记Gk=Bk−1,Gk+1=Bk+1−1
两次应用Sherman-Morrison公式,得
Gk+1=(I−δkTykδkykT)Gk(I−δkTykδkykT)T+δkTykδkδkT
称为BFGS算法关于Gk的迭代公式。
令由DFP算法Gk的迭代公式得到的Gk+1记作GDFP,由BFGS算法Gk的迭代公式得到的Gk+1记作GBFGS,
由于GDFP和GBFGS均满足拟牛顿条件,
则两者的线性组合
Gk+1=αGDFP+(1−α)GBFGS
也满足拟牛顿条件,而且是正定的。其中,0≤α≤1。该类算法称为Broyden类算法。